// --------------------------------------------------------------------------------------------
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
// 
// The contents of this file are subject to the Mozilla Public License Version
// 1.1 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
// 
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
// 
// <remarks>
// Generated by IDLImporter from file nsIJSInspector.idl
// 
// You should use these interfaces when you access the COM objects defined in the mentioned
// IDL/IDH file.
// </remarks>
// --------------------------------------------------------------------------------------------
namespace Gecko
{
	using System;
	using System.Runtime.InteropServices;
	using System.Runtime.InteropServices.ComTypes;
	using System.Runtime.CompilerServices;
	
	
	/// <summary>
    /// Utilities for running nested event loops, asking them to return, and
    /// keeping track of which ones are still running.
    /// </summary>
	[ComImport()]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("6758d0d7-e96a-4c5c-bca8-3bcbe5a15943")]
	public interface nsIJSInspector
	{
		
		/// <summary>
        /// Process the current thread's event queue, calling event handlers until
        /// a call to exitNestedEventLoop, below, asks us to return.
        ///
        /// The name 'enterNestedEventLoop' may be misleading if read too literally.
        /// This method loops calling event handlers until one asks it to stop, and
        /// then returns. So by that point, the nested event loop has been not only
        /// entered, but also run and exited.
        ///
        /// When enterNestedEventLoop calls an event handler, that handler may itself
        /// call enterNestedEventLoop, and so on, so that there may be arbitrarily
        /// many such calls on the stack at the same time.
        ///
        /// We say an enterNestedEventLoop call is "running" if it has not yet been
        /// asked to return, or "stopped" if it has been asked to return once it has
        /// finished processing the current event.
        ///
        /// @param requestor   A token of the caller's choice to identify this event
        /// loop.
        ///
        /// @return depth      The number of running enterNestedEventLoop calls
        /// remaining, now that this one has returned.
        ///
        /// (Note that not all calls still on the stack are
        /// necessary running; exitNestedEventLoop can ask any
        /// number of enterNestedEventLoop calls to return.)
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		uint EnterNestedEventLoop(ref Gecko.JsVal requestor);
		
		/// <summary>
        /// Stop the youngest running enterNestedEventLoop call, asking it to return
        /// once it has finished processing the current event.
        ///
        /// The name 'exitNestedEventLoop' may be misleading if read too literally.
        /// The affected event loop does not return immediately when this method is
        /// called. Rather, this method simply returns to its caller; the affected
        /// loop's current event handler is allowed to run to completion; and then
        /// that loop returns without processing any more events.
        ///
        /// This method ignores loops that have already been stopped, and operates on
        /// the youngest loop that is still running. Each call to this method stops
        /// another running loop.
        ///
        /// @return depth      The number of running enterNestedEventLoop calls
        /// remaining, now that one has been stopped.
        ///
        /// @throws NS_ERROR_FAILURE if there are no running enterNestedEventLoop calls.
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		uint ExitNestedEventLoop();
		
		/// <summary>
        /// The number of running enterNestedEventLoop calls on the stack.
        /// This count does not include stopped enterNestedEventLoop calls.
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		uint GetEventLoopNestLevelAttribute();
		
		/// <summary>
        /// The |requestor| value that was passed to the youngest running
        /// enterNestedEventLoop call.
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		Gecko.JsVal GetLastNestRequestorAttribute();
	}
}
